Hello Telerik Team,
Our customers are using the Telerik Menu component, but they have noticed that its keyboard functionality does not align with the web accessibility standards outlined in the W3C ARIA Authoring Practices. You can review these guidelines at the following link: https://www.w3.org/WAI/ARIA/apg/patterns/menubar/. The page also includes a demo that showcases the expected keyboard behavior for menus.
Is there a way to address these keyboard accessibility issues? If not, are there any planned updates or changes in upcoming releases that will resolve this?
Thanks in advance,
Judy
Hello Telerik Team,
Our customers have found that using the tab and arrow keys for navigation through the radmenu is inconsistent.
For example, when a user tabs into a radmenu item, uses the arrow keys to navigate to other menu items, and then hits the tab key again, the selection jumps to the last tab location instead of the current arrow key location.
Is there any way to make the arrow keys behave the same as the tab key, please?
Thanks in advance,
Lan
Dear All,
I'm using radcontextmenu with radgrid. Normally right click event on all rows of radgrid is showing menus. It is ok. But after i drag and group roomtype column, some rows right click event is showing radcontextmenus and some rows right click event is showing browser default menus. When i debug in browser, showing "TypeError: Cannot read properties of undefined (reading 'getDataKeyValue')" in RadGridID.get_masterTableView().get_dataItems()[currentSelectedRowIndex].getDataKeyValue("ReservationKey")) of javascript file. I searched in google, but not found. Please ask me. What I need to change or code?
.aspx
<telerik:RadGrid ID="RadGrid1" EnableViewState="true" ViewStateMode="Enabled" GridLines="None" MasterTableView-GroupLoadMode="Server"
runat="server" ShowStatusBar="false" AllowSorting="true" ShowGroupPanel="true" ShowFooter="true"
OnNeedDataSource="grdReservation_NeedDataSource" OnSortCommand="grdReservation_SortCommand" OnItemDataBound="grdReservation_ItemDataBound" OnItemCommand="grdReservation_ItemCommand">
<MasterTableView AutoGenerateColumns="false" DataKeyNames="ReservationKey" ItemStyle-Wrap="true" Width="100%" GroupsDefaultExpanded="false"
ClientDataKeyNames="ReservationKey,Status,Remark,SubFolioBalance">
<Columns>
<telerik:GridBoundColumn DataField="Status" HeaderStyle-Width="25px" SortExpression="Status" UniqueName="Status">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="ReservationType" HeaderStyle-Width="25px" SortExpression="ReservationType" UniqueName="Type">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Company" HeaderStyle-Width="160px" HeaderText="Group Name/Company" SortExpression="Company" ItemStyle-Wrap="false"
UniqueName="GroupNameCompany">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="RoomType" HeaderText="RoomType" SortExpression="RoomType" HeaderStyle-Width="80px"
UniqueName="RoomType">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Balance" HeaderStyle-Width="70px" HeaderText="Balance" SortExpression="Balance" ItemStyle-HorizontalAlign="Right"
UniqueName="Balance">
</telerik:GridBoundColumn>
</Columns>
<NoRecordsTemplate>
No Records
</NoRecordsTemplate>
</MasterTableView>
<ClientSettings AllowColumnsReorder="true" ReorderColumnsOnClient="true" AllowDragToGroup="true" EnableRowHoverStyle="true" AllowGroupExpandCollapse="false" AllowRowsDragDrop="true">
<Selecting AllowRowSelect="true" EnableDragToSelectRows="false" />
<Resizing AllowColumnResize="True" AllowRowResize="false" ResizeGridOnColumnResize="false" ClipCellContentOnResize="true" EnableRealTimeResize="false" AllowResizeToFit="true" />
<Scrolling AllowScroll="true" UseStaticHeaders="true" ScrollHeight="380px" SaveScrollPosition="true" />
<ClientEvents OnRowDblClick="rowDblClick" OnRowSelected="OnRwSelected" OnRowMouseOver="OnRowMouseOver" OnRowContextMenu="rowContextMenu" />
</ClientSettings>
</telerik:RadGrid>
<telerik:RadContextMenu ID="RadContextMenu1" runat="server" EnableRoundedCorners="true" RenderMode="Lightweight" SkinID="MinimalSetOfTools" CssClass="centered-editor" Width="300px" EnableShadows="true"
OnClientItemClicking="onContextMenuItemClick"
OnClientShowing="onClientContextMenuShowing">
<DefaultGroupSettings ExpandDirection="Auto" Flow="Vertical" />
</telerik:RadContextMenu>
<script src="../JavaScripts/util/Utilities.js" type="text/javascript"></script>
<script src="../JavaScripts/util/WrapperRadGrid.js" type="text/javascript"></script>
<script src="../JavaScripts/bal/Reservation.js" type="text/javascript"></script>
<script src="../../JavaScripts/lib/jquery.blockUI.min.js" type="text/javascript"></script>
<script type="text/javascript">
function ReloadSelectedRow() {
var grid = $find("<%=grdReservation.ClientID%>");
var master = grid.get_masterTableView();
var scrollArea = document.getElementById(grid.get_element().id + "_GridData");
var row = master.get_selectedItems()[0];
currentSelectedRowIndex = row.get_itemIndex();
GlobalObjectControls.ResKey = row.getDataKeyValue("ReservationKey");
if (row) {
if ((row.get_element().offsetTop - scrollArea.scrollTop) + row.get_element().offsetHeight + 20 > scrollArea.offsetHeight) {
//scroll down to selected row
scrollArea.scrollTop = scrollArea.scrollTop + ((row.get_element().offsetTop - scrollArea.scrollTop) +
row.get_element().offsetHeight - scrollArea.offsetHeight) + row.get_element().offsetHeight + 150;
}
//if the position of the the selected row is above the viewable grid area
else if ((row.get_element().offsetTop - scrollArea.scrollTop) < 0) {
//scroll the selected row to the top
scrollArea.scrollTop = row.get_element().offsetTop;
}
}
}
</script>
<script type="text/javascript" id="commonMethods">
var GlobalObjectControls = {};
Sys.Application.add_load(
function loadHandler() {
Sys.Application.remove_load(loadHandler);
ReloadSelectedRow();
});
</script>
<script>
function rowContextMenu(sender, eventArgs) {
currentSelectedRowIndex = eventArgs.get_itemIndexHierarchical();
eventArgs.get_tableView().selectItem(eventArgs.get_itemIndexHierarchical());
var menu = GlobalObjectControls.ContextMenu;
var evt = eventArgs.get_domEvent();
menu.show(evt);
evt.cancelBubble = true;
evt.returnValue = false;
if (evt.stopPropagation) {
evt.stopPropagation();
evt.preventDefault();
}
}
function OnRwSelected(sender, args) {
GlobalObjectControls.ResKey = args.getDataKeyValue('ReservationKey');
currentSelectedRowIndex = args.get_itemIndexHierarchical();
}
function onClientContextMenuShowing(sender) {
enabledisableMenuItems();
}
function enabledisableMenuItems() {
var menu = GlobalObjectControls.ContextMenu;
alert("ok" + currentSelectedRowIndex); // this is ok, index is showing
var reservationkey = GlobalObjectControls.GridReservation.get_masterTableView().get_dataItems([currentSelectedRowIndex]
.getDataKeyValue("ReservationKey"); // this row is showing error "can't read properties of undefined
var status = GlobalObjectControls.GridReservation.get_masterTableView().get_dataItems()[currentSelectedRowIndex].getDataKeyValue("Status");
var reservationType = getReservationType();
menu.enable();
}
function onContextMenuItemClick(sender, args) {
}
</script>
I am attempting to show a 'tooltip'-like window/div on the RadGrid Columns context menu panel that slides out when you hover over 'Columns'.
The div is shown on the 'mouseenter' event, and then removed on the 'mouseout' event. The issue I'm experiencing is that the 'Columns' context menu will hide itself shortly after the 'tooltip' div is shown, thus causing the window to immediately be removed from the DOM.
Is there a more effective way to produce this kind of behavior? Additionally, I'm targeting the 'li.rmitem.rmtemplate' class, and I'm also wondering if that is the most appropriate one?
In this code snippet from the ClientEvents OnGridCreated event, I'm populating the 'tooltip' div with the column heading, but it will eventually be replaced with dynamic data based upon which column heading is hovered over.
let columnSlideOutItems = document.querySelectorAll('li.rmitem.rmtemplate');
columnSlideOutItems.forEach(function (c) {
let thisNode = c.childNodes[0];
let tooltip = document.createElement('div');
tooltip.style.position = 'absolute';
tooltip.style.backgroundColor = '#fff';
tooltip.style.border = '1px solid #000';
tooltip.style.padding = '10px';
tooltip.innerHTML = thisNode.innerText;
document.body.appendChild(tooltip2);
thisNode.addEventListener('mouseenter', function (e) {
console.log(this.innerText);
tooltip.style.left = e.pageX + 'px';
tooltip.style.top = (e.pageY - 22) + 'px';
tooltip.style.zIndex = 99999;
});
thisNode.addEventListener('mouseout', function (e) {
if (tooltip) tooltip.remove();
});
});
Hi all,
I encountered a really strange problem. After updating the project to use the latest version of the ASP.NET AJAX controls an error saying "Cannot use a leading .. to exit above the top directory" when a toolbar button is pressed or when an edit form is closing. After some investigation I found out that the issue is being caused by the RadMenu, as when I removed all the buttons, using the Chrome inspector, and clicked the toolbar icon, the application worked as expected.
Otherwise the menu itself is fully functional.
This is the stack trace of the exception if it is going to help:
[HttpException (0x80004005): Cannot use a leading .. to exit above the top directory.] System.Web.Util.UrlPath.ReduceVirtualPath(String path) +12081723 System.Web.Util.UrlPath.Reduce(String path) +60 System.Web.UI.Control.ResolveClientUrl(String relativeUrl) +259 Telerik.Web.UI.RadButton.DescribeClientProperties(IScriptDescriptor descriptor) +2227 Telerik.Web.UI.RadWebControl.DescribeComponent(IScriptDescriptor descriptor) +233 Telerik.Web.UI.RadButton.DescribeComponent(IScriptDescriptor descriptor) +27 Telerik.Web.UI.ScriptRegistrar.GetScriptDescriptors(Control control) +171 Telerik.Web.UI.RadWebControl.GetScriptDescriptors() +9 System.Web.UI.ScriptControlManager.RegisterScriptDescriptors(IScriptControl scriptControl) +166 Telerik.Web.UI.RadWebControl.RegisterScriptDescriptors() +159 Telerik.Web.UI.RadWebControl.Render(HtmlTextWriter writer) +122 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +79 Telerik.Web.UI.Menu.Renderers.MenuItemRenderer.RenderTemplateContent(HtmlTextWriter writer, Action`1 action) +288 Telerik.Web.UI.Menu.Renderers.MenuItemRenderer.RenderContents(HtmlTextWriter writer) +171 System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) +50 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +79 Telerik.Web.UI.Menu.Renderers.MenuItemRendererBase.RenderChildGroup(HtmlTextWriter writer, IList`1 items, String groupCssClass, Action action) +203 Telerik.Web.UI.Menu.Renderers.MenuItemRenderer.RenderColumns(HtmlTextWriter writer, IList`1 itemsToRender, String groupCssClass) +587 Telerik.Web.UI.Menu.Renderers.MenuItemRenderer.RenderContentWrapper(HtmlTextWriter writer, Action`1 action) +77 Telerik.Web.UI.Menu.Renderers.MenuItemRendererBase.RenderContents(HtmlTextWriter writer) +133 System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) +50 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +79 Telerik.Web.UI.Menu.Renderers.MenuRendererBase.RenderRootGroup(HtmlTextWriter writer, Action`1 action) +263 Telerik.Web.UI.Menu.Renderers.MenuRenderer.RenderContents(HtmlTextWriter writer) +703 System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) +50 Telerik.Web.UI.RadDataBoundControl.Render(HtmlTextWriter writer) +94 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +79 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +247 System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer) +47 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +79 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +247 System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer) +47 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +79 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +247 System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer) +131 System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer) +47 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +79 System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer) +50 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +247 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +79 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +247 System.Web.UI.Page.Render(HtmlTextWriter writer) +39 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +79 Telerik.Web.UI.RadAjaxControl.RenderPageInAjaxMode(HtmlTextWriter writer, Control page) +959 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +114 System.Web.UI.Page.Render(HtmlTextWriter writer) +39 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +79 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +8817
When initializing a RadScheduler control on a mobile browser (examples are iOS Safari and Android Edge), the javascript plugins code crashes when trying to call `add_hiding` (assuming an event handler).
On the mobile browser, the issue isn't present when to toggle `View Desktop Site`.
From the error stack trace, the second line for `Plugin.js` points to:
Which looks like there's some handling to make context menus work on mobile device.
Any clues as to why `add_hiding` fails on mobile view?
I am attempting to put a radmenu inside of a radgrid gridTemplateColumn. The radmenu appears to have a vertical separator at the end that I have been unable to identify and remove which is underlined in red in the image below.
Markup is as follows. CSS below.
<!--grid markup removed other than relevant column -->
<telerik:GridTemplateColumn UniqueName="ParentGridMenu" HeaderStyle-Width="24px">
<ItemTemplate>
<telerik:RadMenu ID="menuParentRow" runat="server" Width="24px" ClickToOpen="true">
<Items>
<telerik:RadMenuItem ImageUrl="~/images/vertical-ellipsis-24.png" runat="server" Height="24px" Width="24px">
<Items>
<!--items removed as not relevant -->
</Items>
</telerik:RadMenuItem>
</Items>
</telerik:RadMenu>
</ItemTemplate>
</telerik:GridTemplateColumn>
.rmRootGroup
{
border:none !important;
background-color:transparent !important;
background-image:none !important;
},
.RadMenu_Default .rmVertical a.rmLink:hover,
.RadMenu_Default .rmVertical a.rmFocused,
.RadMenu_Default .rmVertical a.rmSelected,
.RadMenu_Default .rmVertical a.rmExpanded,
.RadMenu_Default .rmVertical a.rmExpanded:hover {
border:0 !important;
padding-bottom:1px !important;
padding-top:1px !important;
background-color:transparent !important;
background-image:none !important;
}
Using RadMenu's, submenu is getting expanded on click but if I click on other submenu previous one is not getting collapsed and it remain open only.
I tried below javascript, got it from Telerik forums. It is working for level 1 menu items not for submenu items (level 2 menu items) and sub-submenu items(level 3 items) also.
I have to click twice on level 2 items to open level 3 items.
Code:
<script type="text/javascript">
function onClientItemClicked(sender, args) {
sender.close(true);
}
function OnClientMouseOverHandler(sender, eventArgs) {
if (eventArgs.get_item().get_parent() == sender) {
sender.set_clicked(false);
}
}
</script>
<telerik:RadMenu ID="SampleMenu" runat="server" Skin="Product" RenderMode="Lightweight" ShowToggleHandle="true" AppendDataBoundItems="true" EnableEmbeddedSkins="false" EnableRoundedCorners="true" EnableShadows="true" ExpandDelay="300" ExpandAnimation-Type="InSine" Flow="Vertical" OnClientItemClicked="OnClientItemClicked" OnClientMouseOver="OnClientMouseOverHandler">
While trying to upgrade noted versions of Telerik dlls from 2014 to 2016, I am getting the following compile error
Error 31 The type or namespace name 'Telerik' could not be found (are you missing a using directive or an assembly reference?
I followed the steps to upgrade outlined in the "Upgrade your Telerik ASP.NET Controls in 6 Easy Steps" article https://www.telerik.com/blogs/upgrade-the-version-of-your-telerik-asp.net-controls-in-6-easy-steps?_ga=2.80374999.1963511989.1669135347-1568160397.1669135347&_gl=1*1b5a3vu*_ga*MTU2ODE2MDM5Ny4xNjY5MTM1MzQ3*_ga_9JSNBCSF54*MTY2OTEzNzUyMC4yLjEuMTY2OTEzNzcyNi4wLjAuMA..
Still getting the errors.
Resetting the references back to the 2014 version fixes the errors.
Please help me to resolve